import {defineStore} from 'pinia'
import {ref} from 'vue'
import {login} from '@/api/auth' // 导入 login 函数
import {getMenuList} from '@/api/menu' // 导入获取菜单列表函数
import {ElMessage} from 'element-plus'
import router from '@/router'
import {useMenuStore} from '../store/menu' // 导入菜单 store，修正路径
import {getInfo} from '@/api/user' // 导入获取用户信息函数
import {getUserPermissions} from '@/api/auth'; // 导入获取用户权限函数

export const useUserStore = defineStore('user', () => {
    const token = ref(localStorage.getItem('token') || '')
    const userInfo = ref<any>({})
    const menuStore = useMenuStore()
    const permissions = ref<string[]>([])

    // 登录
    const loginAction = async (loginForm: any) => {
        try {
            const res = await login(loginForm)
            if (res.code === 200) {
                if (res.data && res.data.token) {
                    token.value = res.data.token
                    localStorage.setItem('token', res.data.token)
                    ElMessage.success('登录成功')
                    // 登录成功后拉取菜单和用户信息
                    await getUserInfoAction() // 获取用户信息和权限
                    await fetchMenuList()
                    await router.push('/dashboard') // 直接跳转到 Dashboard 页面
                } else {
                    ElMessage.error('登录失败：未获取到token')
                }
            } else {
                ElMessage.error(res.msg || '登录失败') // 使用 res.msg 统一错误提示
            }
        } catch (error: any) {
            ElMessage.error('登录失败：' + error.message)
        }
    }

    // 获取用户信息和权限
    const getUserInfoAction = async () => {
        try {
            const userInfoRes = await getInfo() // 获取用户信息
            if (userInfoRes.code === 200) {
                userInfo.value = userInfoRes.data

                const permissionsRes = await getUserPermissions() // 获取用户权限
                if (permissionsRes.code === 200) {
                    permissions.value = permissionsRes.data || []
                } else {
                    ElMessage.error(permissionsRes.msg || '获取用户权限失败')
                }
            } else {
                ElMessage.error(userInfoRes.msg || '获取用户信息失败')
            }
        } catch (error: any) {
            ElMessage.error('获取用户信息或权限失败：' + error.message)
        }
    }

    // 拉取菜单
    const fetchMenuList = async () => {
        try {
            const res = await getMenuList()
            if (res.code === 200) {
                menuStore.setMenuList(res.data)
            } else {
                ElMessage.error(res.msg || '获取菜单失败')
            }
        } catch (error: any) {
            ElMessage.error('获取菜单失败：' + error.message)
        }
    }

    // 退出登录
    const logoutAction = async () => {
        token.value = ''
        userInfo.value = {}
        menuStore.resetMenuList()
        permissions.value = []
        localStorage.removeItem('token')
        await router.push('/login')
    }

    return {
        token,
        userInfo,
        permissions,
        loginAction,
        getUserInfoAction,
        fetchMenuList,
        logoutAction
    }
})
